<?php
/**
 * Created by JetBrains PhpStorm.
 * User: akrug
 * Date: 15.05.12
 * Time: 14:06
 * To change this template use File | Settings | File Templates.
 */

/**
 * @see Backend_AbstractController
 */

class Backend_UserController extends UcsMvc_AbstractController
{
    /**
     * @var Backend_Model_DbTable_Users
     */
    protected $_users = null;

    public function __construct(Zend_Controller_Request_Abstract $request, Zend_Controller_Response_Abstract $response, array $invokeArgs = array()){
        parent::__construct($request, $response, $invokeArgs);

        //assoziation zu benutzertabelle
        $this->_users       = new Backend_Model_DbTable_BeUsers();
    }

    /**
     * liste aller Benutzer des Unternehmens, zu dem der angemeldete Benutzer gehoert
     */
    public function indexAction(){
        $busCompanyNid = $this->companySelect();

        if(!$busCompanyNid){
            //bezieht die unternehmensId des eingeloggten Benutzers
            $busCompanyNid = $this->_identity->bus_company_nid;
        }

        //bezieht alle benutzer die dem selben unternehmen angehoeren wie der angemeldete benutzer
        $users = $this->_users->getUsersBy($busCompanyNid);

        if(empty($users)){
            $this->_message = $this->_translator->translate('Es sind keine Benutzer vorhanden.', $this->_currentLanguage);
        }

        $paginator = new Zend_Paginator(new Zend_Paginator_Adapter_Array($users));
        $this->view->paginator = $paginator;

        $this->view->message   = $this->_message;
    }

    private function companySelect(){
        $busCompanyNid = false;

        //nur Benutzer mit der rolle company koennen die benutzer aller unternehmen pflegen
        if($this->accesAllowed('company-select')){
            $form = new Backend_Form_Bus_CompanySelect();

            if($this->_hasParam('filter')){
                if($form->isValid($this->_getAllParams())){
                    //beziehe die id der aus gewaehlten bus_company
                    $busCompanyNid = $this->_getParam('bus_company_nid');
                }
            }

            $this->view->companySelect = $form;
        }

        return $busCompanyNid;
    }

    public function addAction(){
        $form = new Backend_Form_User_User();

        //oncut benutzer hat die moeglichkeit dem Benutzer eine Firma zuzuordnen
        if($this->accesAllowed('company-select')){//company-select bezieht sich auf select in dem die firmen gelistet werden
            $formCompanySelect = new Backend_Form_Bus_CompanySelect();
            $formCompanySelect->removeElement('filter');
            $formCompanySelect->addSubForm(new Backend_Form_Confirm(), 'confirm');
            $form->addSubForm($formCompanySelect, 'company-select');
        }else{
            $form->addSubForm(new Backend_Form_Confirm(), 'confirm');
        }

        if($this->_hasParam('cancle')){
            $this->_message = $this->_translator->translate('Der Vorgang wurde abgebrochen.', $this->_currentLanguage);
            //wird nach submit oder canle vorgang durchgefuehrt
            $this->_forward('index', null, null, array('message' => $this->_message));
        }elseif($this->_hasParam('submit')){
            if($form->isValid($this->_getAllParams())){
                if($this->_users->exists($this->_getParam($this->_users->_name.'_email'))){
                    $form->users_email->markAsError();
                    $form->users_email->addError($this->_translator->translate('Die E-Mail-Adresse ist bereits vergeben.'));
                }else{
                    //bei zugriffsverweigerung, wird die firmenId des eingeloggten benutzers an den neuen benutzer weitergegeben
                    if(!$this->accesAllowed('company-select')){//company-select bezieht sich auf select in dem die firmen gelistet werden
                        $this->_setParam('bus_company_nid', $this->_identity->bus_company_nid);
                    }
                    $this->_users->addRow($this->_getAllParams());
                    $this->_message = $this->_translator->translate('Der Vorgang wurde erfolgreich durchgeführt.');
                    $this->_forward('index', null, null, array('message' => $this->_message));
                }
            }
        }

        $this->view->form      = $form;
        $this->view->message   = $this->_message;
    }

    public function editMyPasswordAction(){
        $form = new Backend_Form_User_Password();
        $form->addSubForm(new Backend_Form_Confirm(), 'confirm');

        //wenn cancle button gedrueckt
        if($this->_hasParam('cancle')){
            $this->_message = $this->_translator->translate('Der Vorgang wurde abgebrochen.', $this->_currentLanguage);

            //wird nach submit oder canle vorgang durchgefuehrt
            $this->_forward('index', null, null, array('message' => $this->_message));
        }

        if($this->_hasParam('submit')){
            if($form->isValid($this->_getAllParams())){
                //liest identitaet des angemeldeten benutzers aus
                $identity = Zend_Auth::getInstance()->getStorage()->read();
                //check, if old password is the same as in database
                if(!$this->_users->passwordValid($identity->users_id, $this->_getParam('passwordOld'))){
                    $form->getElement('passwordOld')->addError($this->_translator->translate('Das Passwort ist nicht korrekt.', $this->_currentLanguage));
                }else{
                    //fuegt den uebergebgen parametern die id des angemeldeten benutzers hinzu
                    $this->_setParam('id', $identity->users_id);
                    $this->_users->editUser($this->_getAllParams());
                    $this->_message = $this->_translator->translate('Das Passwort wurde erfolgreich geändert.', $this->_currentLanguage);
                }
            }
        }

        $this->view->message = $this->_message;
        $this->view->form    = $form;
    }

    public function editPasswordAction(){
        $form = new Backend_Form_User_Password();
        $form->addSubForm(new Backend_Form_Confirm(), 'confirm');

        if($this->getRequest()->isGet()){
            //zeige sicherheitsabfrage
            //uebergebe seitenzahl und suchparameter
            if(!$this->validParams()){
                $this->_message = $this->_translator->translate('Die Benutzer-ID ist ungültig.', $this->_currentLanguage);
                //button submit wird entfernt
                $form->getSubForm('confirm')->removeElement('submit');
                $form->getElement('password')->setAttrib('disabled', true)->setAttrib('readonly', true);
                $form->getElement('passwordConfirm')->setAttrib('disabled', true)->setAttrib('readonly', true);
            }
        }else{
            //wenn cancle button gedrueckt
            if($this->_hasParam('cancle')){
                $this->_message = $this->_translator->translate('Die Passwortänderung wurde abgebrochen.', $this->_currentLanguage);

                //wird nach submit oder canle vorgang durchgefuehrt
                $this->_forward('index', null, null, array('message' => $this->_message));
            }

            if($this->_hasParam('submit')){
                if($form->isValid($this->_getAllParams())){
                    $this->_users->editRow($this->_getAllParams());
                    $this->_message = $this->_translator->translate('Das Benutzerpasswort wurde geändert.', $this->_currentLanguage);
                }
            }
        }

        $this->view->message = $this->_message;
        $this->view->form    = $form;
    }

    public function deleteAction(){
        $form = new Backend_Form_Confirm();

        if($this->getRequest()->isGet()){
            //zeige sicherheitsabfrage
            //uebergebe seitenzahl und suchparameter
            if(!$this->validParams()){
                $this->_message = $this->_translator->translate('Die Benutzer-ID ist ungültig.', $this->_currentLanguage);
                //button submit wird entfernt
                $form->removeElement('submit');
            }
        }else{
            //wenn cancle button gedrueckt
            if($this->_hasParam('cancle')){
                $this->_message = $this->_translator->translate('Das Löschen wurde abgebrochen.', $this->_currentLanguage);
            }

            if($this->_hasParam('submit')){
                $identity = Zend_Auth::getInstance()->getStorage()->read();
                if($identity->users_id == $this->_getParam('id')){
                    $this->_message = $this->_translator->translate('Sie können Ihren eigenen Account nicht löschen.', $this->_currentLanguage);
                }else{
                    $this->_users->deleteRow($this->_getParam('id'));
                    $this->_message = $this->_translator->translate('Der Benutzer wurde gelöscht.', $this->_currentLanguage);
                }
            }

            //wird nach submit oder canle vorgang durchgefuehrt
            $this->_forward('index', null, null, array('message' => $this->_message));
        }

        $this->view->message = $this->_message;
        $this->view->form    = $form;
    }

    /**
     *  hier wird der Benutze ge- oder entsperrt
     */
    public function lockAction(){
        $form = new Backend_Form_Confirm();

        if($this->getRequest()->isGet()){
            //zeige sicherheitsabfrage
            //uebergebe seitenzahl und suchparameter
            if(!$this->validParams()){
                $this->_message = $this->_translator->translate('Die Benutzer-ID ist ungültig.', $this->_currentLanguage);
                //button submit wird entfernt
                $form->removeElement('submit');
            }
        }else{
            //wenn cancle button gedrueckt
            if($this->_hasParam('cancle')){
                $this->_message = $this->_translator->translate('Der Vorgang wurde abgebrochen.', $this->_currentLanguage);
            }

            if($this->_hasParam('submit')){
                //compare logged user data with desired
                $identity = Zend_Auth::getInstance()->getStorage()->read();
                if($identity->users_id == $this->_getParam('id')){
                    $this->_message = $this->_translator->translate('Sie können Ihren eigegenen Account nicht sperren.', $this->_currentLanguage);
                }else{
                    $this->_users->lock($this->_getParam('id'));
                    $this->_message = $this->_translator->translate('Der Vorgang wurde erfolgreich durchgeführt.', $this->_currentLanguage);
                }
            }

            //wird nach submit oder canle vorgang durchgefuehrt
            $this->_forward('index', null, null, array('message' => $this->_message));
        }

        $this->view->message = $this->_message;
        $this->view->form    = $form;
    }
}